package com.turing.data.service.element;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService;
import com.turing.common.response.PageBean;
import com.turing.common.response.ResponseVO;
import com.turing.data.inner.params.out.ElementDetailVO;
import com.turing.data.model.domain.element.Element;
import com.turing.data.model.domain.element.ElementGroup;
import com.turing.data.model.domain.element.SubProduct;
import com.turing.data.vo.in.element.*;
import com.turing.data.vo.out.element.ElementPageBean;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

public interface ElementService extends IService<Element> {

    Element getElementByNameAndTemplate(String eleName, String templateSn);

    List<Element> getElementsByTemplateSn(String templateSn,Integer category);

    List<String> searchElements(@RequestParam("searchText") String searchText, String templateSn);

    Element getElementById(Integer eleId);

    List<String> getElementNamesByTemplateId(String templateId);


    String requireOrCreateElement(String templateId, String cat);

    JSONArray getElementListWithTemplateSn(String templateSn);


    ElementDetailVO getElementDetailById(Integer eleSn);

    String getTemplateNameById(String templateSn);

    PageBean<TemplateVo> getTemplateByPage(SearchVO searchVO);

    PageBean<ElementDetailVO> getElementList(ElementSearchVO searchVO);

    Integer removeTemplate(String templateSn);

    Integer updateTemplateElement(ElementDetailVO update);

    /**
     * 新增场景和要素信息
     * @param insertVO 新增信息
     * @return com.turing.common.response.ResponseVO<java.lang.Object>
     * @author lcy
     * @date 2021/6/7 11:22
     **/
    ResponseVO<Object> insertTemplate(TemplateInsertVO insertVO);

    /**
     * 修改场景和要素信息
     * @param insertVO 修改信息
     * @return com.turing.common.response.ResponseVO<java.lang.Object>
     * @author lcy
     * @date 2021/6/7 11:25
     **/
    ResponseVO<Object> updateTemplate(TemplateInsertVO insertVO);

    String queryPackageNameById(String packageId);

    String getTemplateTypeBySn(String templateSn);

    Integer getEleIdByName(String templateSn,String eleName);

    List<Element> getElementsByTemplateId(String templateId);

    List<TemplateVo> getTemplate(Map<String, Integer> privileges);

    List<TemplateVo> getTemplate();

    List<Element> getElementsByTemplateId(String templateId,Integer category);

    ElementPageBean<ElementAppVO> queryAppElementByCondition(ElementSearchVO elementSearchVO);

    ElementPageBean<ElementAppVO> queryAllElementByCondition(ElementSearchVO elementSearchVO);

    List<ElementAppVO> queryAllTemplateElementByConditon(ElementSearchVO elementSearchVO);
}
